package fr.istic.mmm.coursepoursuite;

import java.util.ArrayList;

import fr.istic.mmm.coursepoursuite.app.App;
import fr.istic.mmm.coursepoursuite.app.Options;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.location.LocationProvider;
import android.os.Bundle;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.webkit.WebView;
import android.widget.Button;
import android.widget.Toast;

@SuppressLint("SetJavaScriptEnabled")
public class MainActivity extends Activity {

	private App application;
	private Options options;
	private WebView webViewMap;

	@Override
	protected void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		// initialisation des objets
		application = ((App)getApplicationContext());
		options = new Options(this);
		options.load();
		application.setOptions(options);

		// affichage de la map
		webViewMap = (WebView)findViewById(R.id.webViewMap);
		webViewMap.loadUrl("file:///android_asset/googleMap/map.html");
		webViewMap.getSettings().setJavaScriptEnabled(true);
		webViewMap.getSettings().setAllowFileAccess(true);

		// bouton D�marrer
		final Button demarrerButton = (Button) findViewById(R.id.demarrerButton);
		demarrerButton.setOnClickListener(new OnClickListener()
		{
			public void onClick(View v)
			{
				Intent runningIntent = new Intent(getApplicationContext(), RunningActivity.class);
				startActivity(runningIntent);
			}

		});
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu)
	{
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item)
	{
		// Handle item selection
		switch (item.getItemId())
		{
		case R.id.action_accueil:
			return true;
		case R.id.action_options:
			Intent optionsIntent = new Intent(getApplicationContext(), OptionsActivity.class);
			startActivity(optionsIntent);
			return true;
		case R.id.action_historique:
			Intent historiqueIntent = new Intent(getApplicationContext(), HistoriqueActivity.class);
			startActivity(historiqueIntent);
			return true;
		default:
			return super.onOptionsItemSelected(item);
		}
	}
	
	// localisation gps
	public void localisation(){
		LocationManager locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);

		// récupération des fournisseurs de localisation
		ArrayList<LocationProvider> providers = new ArrayList<LocationProvider>();
		ArrayList<String> names = (ArrayList<String>) locationManager.getProviders(true);
		for(String name : names)
			providers.add(locationManager.getProvider(name));

		Criteria critere = new Criteria();

		// Pour indiquer la précision voulue
		// On peut mettre ACCURACY_FINE pour une haute précision ou ACCURACY_COARSE pour une moins bonne précision
		critere.setAccuracy(Criteria.ACCURACY_FINE);

		// Est-ce que le fournisseur doit être capable de donner une altitude ?
		critere.setAltitudeRequired(true);

		// Est-ce que le fournisseur doit être capable de donner une direction ?
		critere.setBearingRequired(true);

		// Est-ce que le fournisseur peut être payant ?
		critere.setCostAllowed(false);

		// Pour indiquer la consommation d'énergie demandée
		// Criteria.POWER_HIGH pour une haute consommation, Criteria.POWER_MEDIUM pour une consommation moyenne et Criteria.POWER_LOW pour une basse consommation
		critere.setPowerRequirement(Criteria.POWER_HIGH);

		// Est-ce que le fournisseur doit être capable de donner une vitesse ?
		critere.setSpeedRequired(true);

		// localisation : toutes les 5000ms et/ou 10mètres
		locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 10, new LocationListener() {

			@Override
			public void onStatusChanged(String provider, int status, Bundle extras) {

			}

			@Override
			public void onProviderEnabled(String provider) {

			}

			@Override
			public void onProviderDisabled(String provider) {

			}

			@Override
			public void onLocationChanged(Location location) {
				String msg = "Latitude " + location.getLatitude() + " \nlongitude " + location.getLongitude();
				Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_LONG).show();
			}
		});
	}
}
